package com.zyf;

import java.util.Scanner;

/**
 * 8 验证回文串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写

说明 : 本题中,我们将空字符串定义为有效的回文串,和回文数一样,正读反读一样

示例 1 
输入 :  “A man , a plan , a canal : Panama”
输出 :  true

示例 2 
输入 :  “race  a  car”
输出 :  false



 * @author lenovo
 * @Date 2020年7月2日
 * @Time 下午5:34:44
 */
public class _08_palindromeString {

	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner sc = new Scanner(System.in);
		System.out.println("输入一个字符串(回车结束) : " );
		String s1 = sc.nextLine();
		boolean b = palindromeString(s1);
		System.out.println(b);
	}
	/**
	 * 验证回文串方法
	 * @param s1
	 * @return 布尔值
	 * 
	 * 思路:
	 * s2 字符串接收 s1 字符串中的英文字母和数字,不区分大小写可直接把大写字母转化为小写字母
	 * 方法与判断回文数类似
	 * 两个变量记录首尾字符,循环length()/2次,不相等则返回false
	 * 主函数输出
	 * 
	 */
	public static boolean palindromeString(String s1) {
		String s2 = new String();
		boolean b = true;
		for (int i = 0; i < s1.length(); i++) {
			char c = s1.charAt(i);
			//只保留英文字母和数字
			if ( c >= 'a'&& c <= 'z' || c >='0' && c<='9') {
				s2+=c;
			}else if(c >= 'A'&& c <= 'Z' ) {
				
				//为了不区分大小写,统一将大写字母转换为小写字母
				c += 32;
				s2+=c;
			}
		}		
		//比较s2中的字符
		for (int i = 0; i < s2.length()/2; i++) {
			//定义两个变量,一个获取头字符,一个获取尾字符
			char c1 = s2.charAt(i);
			char c2 = s2.charAt(s2.length()-i-1);
			if (c1 != c2 ) {
				//如果首尾不一致,说明不是回文字符串
				b = false;
			}
		}
		return b;
	}
}